A known TLB is organised as a fully associative flop based TLB backed up by a set associative RAM based TLB. A fully associative structure is expensive due to the need to compare against all tags simultaneously.
Translations can span multiple memory ranges, for example 4 KB, 64 KB and 2 MB or more. Storing larger translations in a single entry massively reduces the number of TLB entries required for a given application. Each translation size needs its index into the TLB calculated based upon a different set of address bits. If there are n different translation sizes supported by a TLB, in the worst case n lookups are required in order to find it. Known implementations store a hitmap, a bit per possible size, to remember which sizes have been used since the last global invalidate operation, and which therefore need looking up.